/**
 * 删除文件及文件夹
 * 递归删除
 */
import path from 'node:path'
import fs from 'node:fs'
import chalk from 'chalk'

// 运行的根目录
const cwd = process.cwd()

/**
 * 删除文件夹
 * @param dirName
 */
export const rmDir = (dirName: string) => {
	try {
		// 要删除的路径地址
		let dirPath: string
		// 判断是不是绝对路径
		if (path.isAbsolute(dirName)) {
			dirPath = dirName
		} else {
			dirPath = path.resolve(cwd, `./${dirName}`)
		}

		if (fs.existsSync(dirPath)) {
			// [ '01', '03', '03.x' ] 仅仅返回第一层，但是不知道这个第一次是什么要进一步判断是目录 还是文件
			const files = fs.readdirSync(dirPath)

			files.forEach((file) => {
				const curPath = path.join(dirPath, file)

				// 如果是目录
				if (fs.statSync(curPath).isDirectory()) {
					// 继续调用删除， 必须把最后的文件删除，才能删除父目录
					// 这里组装的是绝对路径，完整的路径地址
					rmDir(curPath)
				} else {
					// 是文件，直接删除
					// unlinkSync 如果给定的路径是一个软链接，则删除软连接，如果是文件，则删除文件
					fs.unlinkSync(curPath)

					console.log(chalk.redBright(`删除完成：`, curPath))
				}
			})

			// 上面均为同步代码，目录的子文件/子文件夹删除以后，就可以删除当前的传入的文件

			fs.rmdirSync(dirPath)
			console.log(`结束！`)
		} else {
			console.log('给定的路径不存在: ', dirPath)
		}
	} catch (error) {}
}

// 删除相对地址目录
rmDir('./demo/02')
// 删除绝对地址
// rmDir(`D:/owner/node-base-example/file-demo/demo/01`)
